开发者

How to implement IDataErrorInfo on string indexers databinding?

开发者 https://www.devze.com 2023-03-05 14:52 出处:网络
With xaml (notice the binding on dictionary entry Attributes[Welcome]): <Grid x:Name=\"LayoutRoot\">

With xaml (notice the binding on dictionary entry Attributes[Welcome]):

    <Grid x:Name="LayoutRoot">
        <StackPanel>
            <TextBlock FontSize="36"
                   FontWeight="Bold"
                   Foreground="Purple"
                   Text="{Binding Attributes[Welcome]}"
                   VerticalAlignment="Center"
                   HorizontalAlignment="Center"
                   TextWrapping="Wrap" />
            <TextBox Text="{Binding Attributes[Welcome],Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox>
            <TextBox Text="{Binding Attributes[Welcome],Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox>
            <TextBox Text="{Binding Test, Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox>
            <TextBox Text="{Binding Test, Mode=TwoWay, ValidatesOnDataErrors=True}"></TextBox>
        </StackPanel>
    </Grid>
When the view model implements IDataErrorInfo as:


        public string Error
        {
            get { return ""; }
        }

        public string this[string columnName]
        {
            ge开发者_如何学运维t { 
                return "Compulsory Error"; 
            }
        }


Only columnName == "Test" is ever passed. And therefore I get the following application:

How to implement IDataErrorInfo on string indexers databinding?

How can I validate the values being set for the Attributes Dictionary?


I figured that I needed to implement IDataErrorInfo on the Dictionary rather than the viewmodel containing the dictionary. But since IDataErrorInfo member's conflict with IDicitonary. I ended up implementing INotifyDataErrorInfo.


Instead of using a Dictionary the more "MVVMish" way would be to create a simple ViewModel for the items you are going to display in your list. Then add them to a list (instead of a dictionary) and bind to those items. Then you can implement IDataErrorInfo on those ViewModels (along with any other custom logic or anything else you need).

0

精彩评论

暂无评论...
验证码 换一张
取 消