C#中的控件Binding
C#中的控件Binding
-
1、 對于普通string類型(例如一個TextBox值隨一個值得變化而變化)
-
1.1窗口繼承INotifyPropertyChanged接口
public partial class MainWindow : Window, INotifyPropertyChanged
{
}
1.2界面中進行綁定
<TextBlock Text="{ Binding UserName}"/>1.3定義綁定值的get set方法(名稱要一樣)
private string userName; //放在類外public string UserName{get{return userName;}set{userName = value;OnPropertyChanged();}}1.4定義事件發生函數
public event PropertyChangedEventHandler PropertyChanged;private void OnPropertyChanged([CallerMemberName]string prop = ""){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));}//UserName值發生變化觸發OnPropertyChanged()函數,此函數中觸發PropertyChanged事件
//該事件已在內部訂閱,即為UI綁定改變事件
備注:([CallerMemberName]string prop = “”)采用此方法,則某一值發生改變時不用手動傳遞該值名稱,會自動獲取。避免傳遞名稱填錯導致綁定聯系不上
1.5定義上下文
DataContext = this;//this表示PropertyChanged事件觸發的綁定事件在此.cs文件內
- 2、 對于List類型
- 2.1定義ObservableCollection列表,此類列表中已經繼承了INotifyPropertyChanged接口
public ObservableCollection<C_UserInfo > UserInfos { get; set; }
2.2表明上下文
DataContext = this;2.3為列表賦值
UserMgr.Default.UserList()?.ForEach(o =>{UserInfos.Add(o);});2.4UI中使用listView控件并進行綁定
<ListView Grid.Row="2" Name="UserList" ItemsSource="{Binding UserInfos}" MouseDoubleClick="UserList_MouseDoubleClick"><ListView.Template><ControlTemplate><ScrollViewer Background="AliceBlue" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Hidden"><ItemsPresenter/></ScrollViewer></ControlTemplate></ListView.Template><ListView.ItemTemplate><DataTemplate><Grid><Grid.ColumnDefinitions><ColumnDefinition Width=".3*"/><ColumnDefinition Width=".7*"/></Grid.ColumnDefinitions><Image Name="UserUnifyIcon"/><StackPanel Orientation="Vertical" Grid.Column="1"><StackPanel Orientation="Horizontal" VerticalAlignment="Center"><TextBlock Text="{Binding UserName}"/><TextBlock Text="{Binding Status, Converter={StaticResource Bool2StatusCvt}}"/></StackPanel><StackPanel Orientation="Horizontal" VerticalAlignment="Center"><TextBlock Text="{Binding Account}"/><TextBlock Text="{Binding Sex,Converter={StaticResource SexType2StringCvt}}"/> </StackPanel></StackPanel></Grid></DataTemplate></ListView.ItemTemplate></ListView>//listview綁定ObservableCollection列表,其內控件的值可綁定自定義列表中屬性名稱(名稱要一致)
備注1:List只對列表增刪有binding效果,綁定類屬性定義也要寫get set方法
備注2:若要對列表里項元素更新做監視,則ObservableCollection列表中的元素類型要做監視屬性,即定義C_UserInfo時有要求。所以一般會做類型轉換,將普通類型結構體與專門做界面綁定的結構體做類型轉化
備注3:綁定的時候出現類型轉換,例如結構體里面屬性是布爾值,但需要顯示(在線/離線)
1、 定義一個文件夾,文件夾下是各種轉換類
2、類繼承 IValueConverter
3、創建一個資源字典,添加轉換類
xmlns:cvt="clr-namespace:GuGuBirdClient.Cvt"> //把轉換類命名空間加進去<cvt:Bool2StatusCvt x:Key="Bool2StatusCvt"/> //cvt就是該類命名空間 x:是主空間,并創造一個唯一的key值4、在app.xml中添加資源字典
<
5、在要用綁定的XAML中,引用key值
<TextBlock Text="{Binding UserStatus,Converter={StaticResource Bool2StatusCvt}}" Margin="5,10,0,0"/>//引用的是key值,binding還是照之前的寫
總結
以上是生活随笔為你收集整理的C#中的控件Binding的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国外常用免费博客平台
- 下一篇: C# Wpf Binding 使用详解